<?php

class Projeto_ProjetoController extends App_Controller_Crud
{
    public function visualizarAction()
    {
        if (!$id = (int) $this->_request->getParam('id')) {
            $this->_addMessage('projeto/projeto', 'Projeto inválido');
        }

        $projeto = new Model_Projeto();
        $rowProjeto = $projeto->find($id)->current();

        $modelTipoProjeto = new Model_TipoProjeto();
        $aProcessos = $modelTipoProjeto->getProcessos($rowProjeto->fk_tipo_projeto);

        // Recuperar processos já realizados ou iniciados
        $aProcessosRealizados = array();
        $rowSetProjetoProcessos = $rowProjeto->findModel_ProjetoProcesso();
        $fk_processo = null;
        foreach ($rowSetProjetoProcessos as $rowProjetoProcesso) {
            $aProcessosRealizados[$rowProjetoProcesso->fk_processo] = $rowProjetoProcesso;
            if (null == $rowProjetoProcesso->dt_fim) {
                $fk_processo = $rowProjetoProcesso->fk_processo;
            }
        }

        $arFiltroTarefa[] = "fk_projeto = $id";

        $tarefa = new Model_Tarefa();
        $this->view->assign('row', $rowProjeto);
        $this->view->assign('cs_situacao', $this->_getParam('cs_situacao'));
        $this->view->assign('rowCliente', $rowProjeto->findParentModel_Cliente());
        $this->view->assign('rowSetAnotacoes', $rowProjeto->findModel_Anotacao());
        $this->view->assign('rowSetArtefatos', $rowProjeto->findModel_Artefato());
        $this->view->assign('qtdTarefas', $tarefa->getQuantidadeTarefasPorSituacao($id));
        $this->view->assign('aProcessos', $aProcessos);
        $this->view->assign('aProcessosRealizados', $aProcessosRealizados);
        $this->view->assign('fk_processo', $fk_processo);
        $this->view->rowSetUsuarios = $rowProjeto->findModel_UsuarioViaModel_ProjetoUsuario();
        $this->view->qt_horas_total = $projeto->somarHoras($id);
    }

    public function extrasGrid($oGrid)
    {
        if (!$this->_getParam('_exportTo')) {
            $baseUrl   = $this->view->baseUrl();
            $sControle =  'projeto/projeto';
            $sId       = 'id_projeto';
            $extra = new Bvb_Grid_Extra_Column();
            $extra->position ('right')
                  ->name('Ação')
                  ->decorator ('
                            <a class="ui-icon ui-icon-pencil" href="' . $baseUrl . '/'. $sControle . '/visualizar/id/{{' . $sId . '}}/cs_situacao/A"><span>visualizar</span></a>
                            <a class="ui-icon ui-icon-pencil" href="' . $baseUrl . '/'. $sControle . '/formulario/id/{{' . $sId . '}}"><span>alterar</span></a>
                            <a class="ui-icon ui-icon-close" href="' . $baseUrl . '/'. $sControle . '/excluir/id/{{' . $sId . '}}"><span>excluir</span></a>
                        ');
            $oGrid->addExtraColumns($extra);
        }
        return $oGrid;
    }

    public function congelarAction()
    {
        // action body
    }

    public function cancelarAction()
    {
        // action body
    }

    public function finalizarAction()
    {
       if (!$idProjeto = $this->_getParam('id_projeto')) {
            $this->_addMessage('Não foi passado projeto a ser finalizado', 'tarefa');
        }

        $projeto = new Model_Projeto();
        $rowProjeto = $projeto->find($idProjeto)->current();

        if (Model_Projeto::SITUACAO_FINALIZADO == $rowProjeto->cs_situacao) {
            $this->_addMessage('O projeto já estava finalizado', 'tarefa');
        }

        // Verifica se existe alguma tarefa aberta para este projeto
        $select = $projeto->select()->where('tarefa.cs_situacao = ?', Model_Tarefa::SITUACAO_ABERTA);
        $rowTarefas = $rowProjeto->findModel_Tarefa($select);

        if ($rowTarefas->count()) {
            return $this->_addMessage('Não é possível finalizar projeto que tenha tarefas em aberto',
                                      'projeto/projeto/visualizar/id/' . $idProjeto . '/cs_situacao/' . Model_Tarefa::SITUACAO_ABERTA);
        }

        $rowProjeto->dt_fim      = date('Y-m-d H:i:s');
        $rowProjeto->cs_situacao = Model_Projeto::SITUACAO_FINALIZADO;
        $rowProjeto->save();

        $modelHistorico = new Model_Historico();
        $rowHistorico = $modelHistorico->createRow();
        $rowHistorico->fk_usuario  = Zend_Auth::getInstance()->getIdentity()->id_usuario;
        $rowHistorico->st_titulo   = 'Finalizou o projeto ' . $rowProjeto->st_nome;
        $rowHistorico->dt_cadastro = date('Y-m-d H:i:s');
        $rowHistorico->fk_cliente  = $rowProjeto->fk_cliente;
        $rowHistorico->save();

        $rowSetUsuarios = $rowProjeto->findModel_UsuarioViaModel_ProjetoUsuario();

        if (count($rowSetUsuarios)) {
            // Send email
            $this->view->usuarioNome   = Zend_Auth::getInstance()->getIdentity()->st_nome;
            $this->view->rowProjeto    = $rowProjeto;
            $emailBody = $this->view->render('email/projeto-finalizar.phtml');

            $mail = new Ev_Mail('UTF8');
            $mail->setSubject('[CEV] projeto ' . $rowProjeto->st_nome . ' finalizado');
            $mail->setBodyHtml($emailBody);
            foreach ($rowSetUsuarios as $rowUsuarioDestino) {
                $mail->addTo($rowUsuarioDestino->st_email, $rowUsuarioDestino->st_nome);
            }
            $mail->send();
        }
        $this->_redirect('tarefa');
    }

    public function novoAction()
    {
        $fk_cliente = $this->_getParam('fk_cliente');

        if ($this->getRequest()->isPost()) {
            $dados = $this->_getAllParams();
            $dados['cs_situacao'] = Model_Projeto::SITUACAO_ABERTO;
            $dados['fk_usuario_responsavel'] = Zend_Auth::getInstance()->getIdentity()->id_usuario;

            $modelProjeto = new Model_Projeto();
            $idProjeto = $modelProjeto->gravar($dados);

            $projeto = new Model_Projeto();
            $projeto->gerarTarefas($idProjeto);

            $this->_addMessage('Projeto criado com sucesso', 'projeto/projeto/visualizar/id/' . $idProjeto);
        }

        $modelCliente = new Model_Cliente();
        $rowCliente = $modelCliente->find($fk_cliente)->current();
        $this->view->rowCliente = $rowCliente;
        $this->_carregarExtrasFormulario();
    }

    public function relacionarUsuarioAction()
    {
        $this->_helper->layout()->disableLayout();
        $fk_projeto = $this->_getParam('fk_projeto');
        if ($this->getRequest()->isPost()) {
            $aUsuarios = (array) $this->_getParam('aUsuarios');
            $model = new Model_ProjetoUsuario();
            //$model->delete('fk_projeto = ' . $fk_projeto);
            foreach ($aUsuarios as $idUsuario) {
                $dados['fk_usuario'] = $idUsuario;
                $dados['fk_projeto'] = $fk_projeto;
                $model->createRow($dados)->save();
            }
            $this->_addMessage('Usuários relacionados', 'projeto/projeto/visualizar/id/' . $fk_projeto);
        }

        $projeto = new Model_Projeto();
        $rowProjeto = $projeto->find($fk_projeto)->current();
        $rowCliente = $rowProjeto->findParentModel_Cliente();

        $aUsuariosProjeto = array();
        $rowSetUsuarioProjeto = $rowProjeto->findModel_UsuarioViaModel_ProjetoUsuario();
        foreach ($rowSetUsuarioProjeto as $rowUsuario) {
            $aUsuariosProjeto[$rowUsuario->id_usuario] = true;
        }

        $rowSetUsuarioView = array();
        $rowSetUsuario = $rowCliente->findModel_UsuarioViaModel_ClienteUsuario();
        foreach ($rowSetUsuario as $rowUsuario) {
            if (isset($aUsuariosProjeto[$rowUsuario->id_usuario])) {
                continue;
            }
            $rowSetUsuarioView[] = $rowUsuario;
        }

        $this->view->fk_projeto = $fk_projeto;
        $this->view->rowSetUsuario = $rowSetUsuarioView;
    }

    public function excluirUsuarioAction()
    {
        $fk_projeto = $this->_getParam('fk_projeto');
        $fk_usuario = $this->_getParam('fk_usuario');
        $model = new Model_ProjetoUsuario();
        $model->delete('fk_projeto = ' . $fk_projeto . ' AND fk_usuario = ' . $fk_usuario);
        $this->_addMessage('Usuário desrelacionado', 'projeto/projeto/visualizar/id/' . $fk_projeto);
    }

    public function finalizarProcessoAction()
    {
        $fkProjeto = $this->_getParam('fk_projeto');
        $fkProcesso = $this->_getParam('fk_processo');

        $modelProjeto = new Model_Projeto();
        $modelProjeto->finalizarProcesso($fkProjeto, $fkProcesso);

        $this->_redirect('projeto/projeto/visualizar/id/' . $fkProjeto);
    }

    public function iniciarProcessoAction()
    {
        $fkProjeto = $this->_getParam('fk_projeto');
        $fkProcesso = $this->_getParam('fk_processo');

        $modelProjeto = new Model_Projeto();
        $modelProjeto->iniciarProcesso($fkProjeto, $fkProcesso);

        $this->_redirect('projeto/projeto/visualizar/id/' . $fkProjeto);
    }
}
